package com.miplus.ccrm.workflow.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.yulichang.base.MPJBaseService;
import com.miplus.ccrm.common.CmdResVo;
import com.miplus.ccrm.workflow.model.dto.workflow.*;
import com.miplus.ccrm.workflow.model.po.Workflow;
import com.miplus.ccrm.workflow.model.vo.WorkflowDetailsVO;
import com.miplus.ccrm.workflow.model.vo.WorkflowVO;
import com.miplus.ccrm.workflow.model.vo.WorkflowVersionVO;

import java.util.List;

/**
 * 工作流服务接口
 */
public interface WorkflowService extends MPJBaseService<Workflow> {

    /**
     * 创建话术
     * @param dto 创建参数
     * @return 影响行数
     */
    CmdResVo createWorkflow(WorkflowCreateDTO dto, String userId);

    /**
     * 更新话术
     * @param dto 更新参数
     * @return 影响行数
     */
    CmdResVo updateWorkflow(WorkflowUpdateDTO dto, String userId);

    /**
     * 删除话术
     * @param id 工作流ID
     * @return 影响行数
     */
    CmdResVo deleteWorkflow(String id, Integer version, String userId);

    /**
     * 复制话术
     * @param dto 复制参数
     * @return 影响行数
     */
    CmdResVo copyWorkflow(WorkflowCopyDTO dto, String userId);
    /**
     * 导出工作流
     * @param dto 导出参数
     * @return 影响行数
     */

    /**
     * 导入工作流
     * @param dto 导入参数
     * @return 影响行数
     */

    /**
     * 切换版本
     * @param dto 切换版本参数
     * @return 影响行数
     */
    CmdResVo switchVersion(WorkflowSwitchVersionDTO dto, String userId);

    /**
     * 分页查询工作流列表
     * @param dto 查询参数
     * @return 分页数据
     */

    /**
     * 获取工作流详情
     * @param workflowDetailDTO 查询参数
     * @return 工作流详情
     */
    WorkflowVO getWorkflowDetail(WorkflowDetailDTO workflowDetailDTO);

    /**
     * 获取工作流列表分页
     * @param dto 查询参数
     * @return 工作流列表
     */
    IPage<WorkflowVO> getWorkflowList(WorkflowQueryDTO dto);

    /**
     * 获取用户工作流版本列表
     * @param workflowId 工作流ID
     * @param userId 用户ID
     * @return 工作流版本列表
     */
    List<WorkflowVersionVO> getUserWorkflowVersions(String workflowId, String userId);

    CmdResVo editWorkflowVersion(WorkflowVersionUpdateDTO workflowVersionUpdateDTO, String userId);
    /**
     * 获取用户工作流列表
     * @param userId 用户ID
     * @return 工作流列表
     */
    IPage<WorkflowVO> getUserWorkflows(String userId);


    IPage<WorkflowDetailsVO> getWorkflowDetailsList(WorkflowQueryDTO query);

    CmdResVo changeWorkflowStatus(WorkflowStatusChangeDTO statusChangeDTO, String userId);

    CmdResVo withdrawWorkflow(WorkflowWithdrawDTO workflowWithdrawDTO, String userId);
}
